package com.study.java8.char09.shape;

import java.util.Random;

/**
 * RandomShapes 是一种工厂，每当我们调用 `get()` 方法时，就会产生一个指向
 * 随机创建的Shape 对象的引用。注意，向上转型法神在return中，每条 Return
 * 语句取得的一个指向某个 Circle，Square 或 Triangle 的引用，并将其以Shape
 * 类型从 get 方法 发出去，因此无论何时调用get()，都无法知道具体的类型
 * 因为总是得到一个简单的Shape引用。
 */
public class RandomShapes {
    private Random rand = new Random(47);

    public Shape get() {
        switch(rand.nextInt(3)) {
            default:
            case 0: return new Circle();
            case 1: return new Square();
            case 2: return new Triangle();
        }
    }

    /**
     * array() 方法分配并填充了 Shape 数组
     */
    public Shape[] array(int sz) {
        Shape[] shapes = new Shape[sz];
        // Fill up the array with shapes:
        for (int i = 0; i < shapes.length; i++) {
            shapes[i] = get();
        }
        return shapes;
    }
    public static void main(String[] args) {
        RandomShapes randomShapes = new RandomShapes();
        randomShapes.get();
    }
}
